package studentUeb;

import studentUeb.exceptions.*;
import studentUeb.*;
import htw.exceptions.*;
import htw.io.*;

/**
 * Klasse zum Speichern und Laden von Student Objekten. 
 * 
 * @author     Steffen Schuhmann, Andreas Dier 
 * @version    a0.1
 */
public class StudentIO extends ObjectIO {

    /**
     * Methode zum speichern von Objekten des Typs StudentList, dabei muss muss eine StudentList sowie ein gewuenschter Dateiname uebergeben werden.
     *
     * MoeGLICHE FEHLER MueSSEN NOCH IN KOMMENTAR NACHGEREICHT WERDEN, HIERFueR SIEHE MoeGLICH FEHLER DER ANDEREN SAVESTUDENTLIST
     * 
     * @param studentList Die zu speichernde Liste.
     * @param fileName Der gewuenschte Dateiname
     * 
     */
    public static void saveStudentListObject(StudentQueue studentList, String fileName) throws Exception {            
        saveObject(studentList, fileName);
    }
    
    
    /**
     *
     *
     * @param student Das zu speichernde Objekt vom Typ Student
     * @param fileName Der Dateiname unter dem gespeichert werden soll
     * @param override Wenn override auf true gesetzt ist wird eine vorhandene Datei mit dem gleichen Namen ueberschrieben. Falls override auf false gesetzt ist wird die Datei nicht geschrieben und es wird eine FileAlreadyExistsException geworfen.
     *
     * @param student Das zu speichernde Objekt vom Typ Student
     * @param fileName Der Dateiname unter dem das Objekt gespeichert werden soll.
     * @param override Ueberschreiben einer vorhandenen Datei bei true.
     * @exception    NullPointerExceptions Wird geworfen falls der Dateiname leer ist.
     * @exception StringIsEmptyException wird geworfen falls der Dateiname leer ist.
     * @exception FileAlreadyExistsException wird geworfen falls eine vorhandene Datei nich ueberschrieben werden soll, diese jedoch existiert.
     * @exception CanNotWriteObjectException Wird geworfen falls das uebergebene Objekt nicht gespeichert werden kann(Serializable muss implementiert sein!!), der genaue Grund kann ueber den Fehlerstring ermittelt werden.
     */
    public static void saveStudentListObject(StudentQueue studentList, String fileName, boolean override) throws Exception  {      
        saveObject(studentList, fileName, override);
    }
    
    
    /**
     * Methode zum Laden von Studenten Objekten, dabei muss ein Dateiname des gespeicherten Objektes angegeben werden.
     * @param fileName der Dateiname der zu oeffnenden Datei
     * @return Das gelesene Objekt vom Typ Student
     * @exception StringIsEmptyException Wird geworfen falls der Dateiname leer ist.
     * @excpetion CanNotLoadObjectException
     */
    public static StudentQueue loadStudentListObject(String fileName) throws Exception {
        Object object = null;
        
        try {
            object = loadObject(fileName);
        } catch(ClassNotFoundException cnf) {
            ;
        }
        
        if(!(object instanceof StudentList)) 
            throw new NullPointerException(); // TODO durch eine neue Fehlermeldung ersetzten
            
        return (StudentQueue)object;
    }
}
